// ECMAScript 2017    

const obj = {
    foo: '1',
    bar: '2'
}


// Object.values ------------------------------  
// console.log(Object.values(obj))

// Object.entries ------------------
// console.log(Object.entries(obj))
// for(const [key, value] of Object.entries(obj) ){
//     console.log(key, value)
// }

// console.log(new Map(Object.entries(obj)))

// Object.getOwnPropertyDescriptor -----------------
// 配合es5对对象的get/set方法进行操作
const p1 = {
    firstName: 'husky',
    lastName: 'su',
    get fullName(){
        return `${this.firstName} ${this.lastName}`
    }
}
// console.log(p1.fullName)
// const p2 = Object.assign({}, p1)
// p2.firstName = 'haha'
// console.log(p2.firstName) // { firstName: 'haha', lastName: 'su', fullName: 'husky su' }

// const descriptors = Object.getOwnPropertyDescriptors(p1)
// const p2 = Object.defineProperties({}, descriptors)
// p2.firstName = 'haha'
// console.log(p2)

// String.prototype.padStart / String.prototype.padEnd -------
// 字符串填充  

const books = {
    html: 5,
    css: 16,
    javascript: 128
}
// for(const [name, value] of Object.entries(books) ){
//     console.log(name, value)
// }

// for(const [name, value] of Object.entries(books) ){
//     // html------------ | 500
//     // css------------- | 160
//     // javascript------ | 128
//     console.log(`${name.padEnd(16, '-')} | ${value.toString().padEnd(3, '0')}`)
// }



// 在函数参数重添加尾逗号 --------------------
// function foo(
//     a,
//     b,
//     c,
// ){

// }

// const array = [
//     a,
//     b,
//     c,
// ]